<?php
namespace util\upload;

/**
 * Class Uploader
 * @package soa\core
 */
class Uploader
{
    private $save_name; // 文件保存名字
    private $save_dir; // 文件保存目录
    private $save_path; // 文件保存路径 = 目录 + 名字

    private function createFile($save_name, $save_dir)
    {
        $this->save_dir = $save_dir;
        $this->save_name = $save_name;

        //创建文件夹
        @$this->createDir($this->save_dir);
        //设置目录+图片完整路径
        $this->save_path = trim($this->save_dir, '/') . '/' . $this->save_name;
    }

    /**
     * 保存 base64 编码文件
     * @param $save_name
     * @param $save_dir
     * @param $imageStream
     * @return bool
     */
    public function uploadStream($save_name, $save_dir, $imageStream)
    {
        if (empty($save_name || empty($save_dir))) {
            return '';
        }

        $this->createFile($save_name, $save_dir);//创建文件

        $data = base64_decode($imageStream);

        if (empty($data)) {
            return '';
        }

        if ($this->writeFile($data)) {
            return $this->save_path;
        }
    }

    /**
     * 写数据到文件
     * @param $data
     * @return mixed
     */
    private function writeFile($data)
    {
        if (@$fp = fopen($this->save_path, 'w+')) {
            if (fwrite($fp, $data) !== false) {
                fclose($fp);
                return true;
            }
            fclose($fp);
        }
    }

    /**
     * 创建文件夹
     * @param String $dirName 文件夹路径名
     * @param int $recursive
     * @param int $mode
     */
    private function createDir($dirName, $recursive = 1, $mode = 0777)
    {
        !is_dir($dirName) && mkdir($dirName, $mode, $recursive);
    }

}
